o.GetType() vs typeof()

typeof

  • Выполняется на этапе компиляции и может применяться только к типам, название которых можно понять на этапе компиляции.
  • Не поддерживает полиморфизм, то есть в случае вызова от базового класса, вернет тот самый базовый класс.

GetType()

  • Выполняется на этапе исполнения.
  • Можно узнать тип переменной, которая не будет известна на этапе компиляции.
  • Поддерживает полиморфизм, то есть вернет тот тип, которым был создан объект, даже если он приведен к базовому.